#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QByteArray>
#include <QJsonDocument>
#include "loginwindow.h"
#include "mainui.h"


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    // 初始化
    void init();
    // 注册日志消息处理
    void initLogger();
    // 客户端总控函数
    void mainControl();
    // 解析json的响应报文
    QString analysisJsonReply(QByteArray json);
    // 处理登录请求响应报文
    void dealLoginReply(const QString& json);
    // 处理其他用户发送的添加好友请求
    void dealAddFriendRequest(const QString& json);
    // 处理好友搜索结果的响应报文
    void dealGetUserInfoReply(const QString& json);
    // 处理添加好友响应报文
    void dealAddFriendReply(const QString& json);
    // 添加好友处理结果
    void dealAddFriendResult(const QString& json);
    // 处理好友登录通知
    void dealFriendLogin(const QString& json);
    // 处理好友离线通知
    void dealFriendQuit(const QString& json);
    // 处理删除好友通知
    void dealDeleteFriendNotice(const QString& json);
    // 处理推送通知(新消息)
    void dealNewPush(const QString& json);
    // 处理私聊消息
    void dealPrivateChat(const QString& json);
    // 处理文件头确认
    void dealFileHeadACK(const QString& json);
    // 处理文件上传响应
    void dealUpLoadReply(const QString& json);
    // 处理创建群聊响应
    void dealCreateGroupReply(const QString& json);
    // 处理群创建通知
    void dealNewGroupNotice(const QString& json);
    // 解散群聊响应
    void dealDissolveGroupReply(const QString& json);
    // 处理群聊搜索结果的响应报文
    void dealGetGroupInfoReply(const QString& json);
    // 处理添加群聊响应
    void dealAddGroupReply(const QString& json);
    // 解散群聊通知
    void dealDissolveGroupNotice(const QString& json);
    // 退出群聊响应
    void dealQuitGroupReply(const QString& json);
    // 验证码过期或不正确
    void dealCodeOutError(const QString& json);
    // 手机号已被注册
    void dealPhoneAlreadyRegister(const QString& json);
    // 注册响应
    void dealRegisterReply(const QString& json);
    // 群聊信息
    void dealGroupChat(const QString& json);
    // 处理新动态通知
    void dealNewFeed(const QString& json);
    // 处理动态
    void dealFeed(const QString& json);
    // 处理点赞评论通知
    void dealNewDZPL(const QString& json);
    // 处理评论
    void dealPL(const QString& json);
    // 处理点赞
    void dealDZ(const QString& json);
    // 取消点赞
    void dealUNDZ(const QString& json);
    // 新的群文件
    void dealNewGroupFile(const QString& json);
    // 群文件下载
    void dealFileSrvpath(const QString &json);
    // 编辑个人资料响应
    void dealModifyUserInfoReply(const QString& json);
    // 新的群公告
    void dealGroupNotice(const QString& json);
    // 新的群成员
    void dealNewGroupMember(const QString& json);
    // 群成员退出通知
    void dealQuitGroupNotice(const QString& json);
    // 新好友
    void dealNewFriend(const QString& json);
    // 删除好友响应
    void dealDeleteFriendReply(const QString& json);
    // 清空临时目录tmp下的文件
    void clearTmpFile();


private slots:
    //处理响应
    void dealReply(QString buf);

private:
    Ui::Widget *ui;
    LoginWindow* m_login;   //登录界面
    MainUI* m_main;         //主界面
};
#endif // WIDGET_H
